package d2_polymorphism;

public class Test {
    public static void main(String[] args) {
        //目标:搞清楚使用多态的好处
        //1.多态下右边对象时解耦合的
        Animal a = new Dog();//解耦合就是当我不想使用Dog这个对象,
        // 想换成Cat,时是不需要更改下面的代码,直接把new Dog()换成new Cat()即可
        a.cry();


        Cat c = new Cat();
        go(c);

        Dog d = new Dog();
        go(d);

        System.out.println("---------------------");
        //多态下存在的一个问题,不能直接调用子类独有的问题
        //a.lookDoor();//报错--->符合里比编译看左边,运行看右边(编译时,父类没有这个方法,所以直接报错)
    }

    //2.多态下,父类型作为方法的形参,可以接受一切子类对象, 方法跟加便便利
    public static void go(Animal a){
        System.out.println("开始...");
        a.cry();//这是对象回调:就是我把对象送给你,你回过头来调用我对象的方法
        System.out.println("结束...");
    }
}
